import { getToken, removeToken } from '@/plugins/cookies';
import axios, { AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios'
import { ElMessage,ElNotification } from 'element-plus'
import { storeData } from '@/strore'  //pinia
import { useCookies } from "@vueuse/integrations/useCookies"; // 引入cookie

const cookie = useCookies(); // cookie的调用

// 请求头
const service = axios.create({
  baseURL: '/api',
  timeout: 60 * 1000,
})

// 添加请求拦截器
service.interceptors.request.use(function (config: InternalAxiosRequestConfig) {
  const token = getToken()
  if (token) {
    config.headers["token"] = token
    config.headers["Content-Type"] = 'application/x-www-form-urlencoded'
  }
  return config;
}, function (error) {
  // 对请求错误做些什么
  ElMessage.error('11111111111111')
  return Promise.reject(error);
});

// 添加响应拦截器
service.interceptors.response.use(function (response: AxiosResponse<any>) {
  
  // 对响应数据做点什么
  // console.log('response',response.data);
  
  return response.data;
}, function (error) {
  const store = storeData()  // pinia的调用

  /***** 异常处理 *****/
  if (error && error.response) {
    // 1.公共错误处理 // 2.根据响应码具体处理
    switch (error.response.status) {
      case 201:
        error.message = '请求方式错误'
        break;
      case 400:
        error.message = '错误请求'
        break;
      case 401:
        error.message = '未授权，请重新登录'
        break;
      case 403:
        error.message = '拒绝访问'
        break;
      case 404:
        error.message = '请求错误,未找到该资源'
        break;
      case 405:
        error.message = '请求方法未允许'
        break;
      case 408:
        error.message = '请求超时'
        break;
      case 500:
        error.message = '服务器端出错'
        break;
      case 501:
        error.message = '网络未实现'
        break;
      case 502:
        error.message = '网络错误'
        break;
      case 503:
        error.message = '服务不可用'
        break;
      case 504:
        error.message = '网络超时'
        break;
      case 505:
        error.message = 'http版本不支持该请求'
        break;
      default:
        error.message = `连接错误${error.response.status}`
    }
  } else {
    // 超时处理
    if (JSON.stringify(error).includes('timeout')) {
      error.message = '服务器响应超时，请刷新当前页'
    } else {
      error.message = '连接服务器失败'
    }
  }
  ElMessage.error(error.message)

  // 非法 token 退出登录
  const msg = error.response.data.msg || "请求失败"
  console.log('msg',msg);
  if (msg == "非法token，请先登录！") {
    // 非法 token 退出登录
    if (msg == "非法token，请先登录！") {
      removeToken() // 移除token
      location.reload()  //刷新页面
      store.tabList = []
      store.userinfo = {username:'',avatar:'',}
      cookie.remove('tabList')
    }
  }
  return Promise.reject(error);
});

export default service